import { IEventHandler, IEventParams } from "./IUtils";

/**
 * HTTP请求辅助类
 * XXX:单列用法时注意请求混乱问题
 */
export interface IHttpHelper {
  /**post 请求 返回字符串 */
  post<T>(url: string, data?: any): Promise<T>;
  /**get 请求 返回字符串 */
  get<T>(url: string, data?: any): Promise<T>;
  /**
   * 自定义请求
   * @param options 请求参数对象
   */
  request<T>(options: IRequest): Promise<T>;
}
/**Http 过滤器 */
export interface IHttpFilter {
  /**
   * 路由拦截器
   * @param options
   * @return true 执行拦截,false 不处理;
   */
  routeFitler(options: IRequest): boolean;
  /**
   * 请求创建前-尚未构建参数
   * @param params 请求参数
   */
  beforeCreate(params: IRequest);
  /**
   * 参数初始化完毕
   * @param params 请求参数
   * @param xhr XMLHttpRequest
   */
  created(params: IRequest, xhr: any);
  /**
   * 请求完成
   * @param result 请求结果
   *  @param params 请求参数
   */
  completed(result: any, params: IRequest);
  /**
   * 请求异常
   * @param ex
   */
  error(ex: any);
}
/**请求头参数配置 */
export interface IHeader {
  /**get 全局请求头参数,例如:post['Content-Type'] = 'application/text'*/
  get: any;
  /**post 全局请求头参数,例如:post['Content-Type'] = 'application/json' */
  post: any;
  /**通用全局请求头参数,例如: common['Authorization'] = AUTH_TOKEN */
  common: any;
  /**根据key检索所有请求头，并移除值 */
  remove(key: string);
}
/**
 * request请求参数
 */
export interface IRequest {
  /**请求地址 */
  url: string;
  /**请求方法-get,post,delete等-默认get方法 */
  method?: string;
  /**请求数据*/
  data?: any;
  /**请求参数-将赋值给请求连接 */
  params?: any;
  /**请求头,格式为key-value数组 语法:headers["Content-Type"]= "application/json" */
  headers?: any;
  /**响应类型-text,json,xml,byteArray */
  responseType?: string;
  /**处理事件 */
  progress?: IEventParams;
}

export interface ISocket {}
